﻿Option Strict On
Option Explicit On

Imports System.Text
Imports System.Globalization

''' -----------------------------------------------------------------------------
''' <summary>
'''     Microsoft.VisualBasic.Strings をカバーした静的クラスです。
'''     
''' 　　共通の文字列操作関連は、ここに追加していく。
''' 
'''     Revsion  Info                                 Name   Date
'''      1.0.0   新規作成                             廣木   2012-08-29
'''      1.1.0   文字数/Byte数，大/小文字変換         廣重   2012-08-29
'''      1.2.0   通信コマンド用にサイズ設定を追加     廣木   2012-09-09
'''      4.x.x   先頭から文字を検索を追加             田口   2014-12-15
'''      4.1.1   Bin->Chr変換を追加                   廣木   2015-01-08
''' </summary>
''' -----------------------------------------------------------------------------

Public Class VBStrings


#Region "　Left メソッド　"

    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     文字列の左端から指定された文字数分の文字列を返します。</summary>
    ''' <param name="stTarget">
    '''     取り出す元になる文字列。</param>
    ''' <param name="iLength">
    '''     取り出す文字数。</param>
    ''' <returns>
    '''     左端から指定された文字数分の文字列。
    '''     文字数を超えた場合は、文字列全体が返されます。</returns>
    ''' -----------------------------------------------------------------------------------
    Public Shared Function Left(ByVal stTarget As String, ByVal iLength As Integer) As String
        If iLength <= stTarget.Length Then
            Return stTarget.Substring(0, iLength)
        End If

        Return stTarget
    End Function

#End Region

#Region "　Mid メソッド (+1)　"

    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     文字列の指定された位置以降のすべての文字列を返します。</summary>
    ''' <param name="stTarget">
    '''     取り出す元になる文字列。</param>
    ''' <param name="iStart">
    '''     取り出しを開始する位置。</param>
    ''' <returns>
    '''     指定された位置以降のすべての文字列。</returns>
    ''' -----------------------------------------------------------------------------------
    Public Overloads Shared Function Mid(ByVal stTarget As String, ByVal iStart As Integer) As String
        If iStart <= stTarget.Length Then
            Return stTarget.Substring(iStart - 1)
        End If

        Return String.Empty
    End Function

    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     文字列の指定された位置から、指定された文字数分の文字列を返します。</summary>
    ''' <param name="stTarget">
    '''     取り出す元になる文字列。</param>
    ''' <param name="iStart">
    '''     取り出しを開始する位置。</param>
    ''' <param name="iLength">
    '''     取り出す文字数。</param>
    ''' <returns>
    '''     指定された位置から指定された文字数分の文字列。
    '''     文字数を超えた場合は、指定された位置からすべての文字列が返されます。</returns>
    ''' -----------------------------------------------------------------------------------
    Public Overloads Shared Function Mid(ByVal stTarget As String, ByVal iStart As Integer, ByVal iLength As Integer) As String
        If iStart <= stTarget.Length Then
            If iStart + iLength - 1 <= stTarget.Length Then
                Return stTarget.Substring(iStart - 1, iLength)
            End If

            Return stTarget.Substring(iStart - 1)
        End If

        Return String.Empty
    End Function

#End Region

#Region "　Right メソッド　"

    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     文字列の右端から指定された文字数分の文字列を返します。</summary>
    ''' <param name="stTarget">
    '''     取り出す元になる文字列。</param>
    ''' <param name="iLength">
    '''     取り出す文字数。</param>
    ''' <returns>
    '''     右端から指定された文字数分の文字列。
    '''     文字数を超えた場合は、文字列全体が返されます。</returns>
    ''' -----------------------------------------------------------------------------------
    Public Shared Function Right(ByVal stTarget As String, ByVal iLength As Integer) As String
        If iLength <= stTarget.Length Then
            Return stTarget.Substring(stTarget.Length - iLength)
        End If

        Return stTarget
    End Function

#End Region

#Region "　Ｂｉｎ→Ｈｅｘ変換 メソッド　"

    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     BinデータをHex文字列に変換し、文字列を返します。</summary>
    ''' <param name="bTarget">
    '''     取り出す元になるBinデータ。</param>
    ''' <param name="iLength">
    '''     取り出す文字数。</param>
    ''' <returns>
    '''     Hexの文字列全体が返されます。</returns>
    ''' -----------------------------------------------------------------------------------
    Public Shared Function BinToHexStr(ByVal bTarget() As Byte, ByVal iLength As Integer) As String
        Dim i As Integer
        Dim sztmp As String = ""
        Dim szStr As String

        For i = 0 To iLength - 1
            szStr = Hex(bTarget(i))
            If 2 > Len(szStr) Then
                szStr = "0" & szStr
            End If
            sztmp = sztmp & szStr
        Next i

        Return sztmp
    End Function

#End Region

#Region "　Ｈｅｘ→Ｂｉｎ変換 メソッド　"

    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     Hex文字列をBinデータに変換し、文字列を返します。</summary>
    ''' <param name="szTarget">
    '''     取り出す元になるHex文字列。</param>
    ''' <param name="bTarget">
    '''     Binデータを返されます。</param>
    ''' <param name="iLength">
    '''     取り出したﾊﾞｲﾄ数。</param>
    ''' -----------------------------------------------------------------------------------
    Public Shared Sub HexStrToBin(ByRef bTarget() As Byte, ByVal szTarget As String, ByRef iLength As Integer)
        '        Dim BytBuff(1024 * 7000 * 2) As Byte  ' バイナリーデータ作成ワーク
        Dim BytBuff(szTarget.Length) As Byte  ' バイナリーデータ作成ワーク
        Dim strBuff As String      ' 変換用ワーク
        Dim iLen As Integer       ' ストリング長
        Dim BytCount As Integer    ' バイト カウント
        Dim i As Integer     ' ループカウンター

        BytCount = 0                    ' バイト カウントクリア
        strBuff = Trim(szTarget)          ' 入力データアイテムをセット
        Try
            If strBuff <> "" Then           ' メッセージアイテムの入力あり？
                iLen = strBuff.Length        ' メッセージアイテム入力データ長
                For i = 1 To iLen
                    If Mid(strBuff, i, 1) >= "0" Then    ' コントロールキャラをスキップする
                        BytBuff(BytCount) = CByte("&h" & Mid(strBuff, i, 2))
                        i = i + 1                   ' ２文字ずつ処理する為、+1 する
                        BytCount = BytCount + 1     ' バスト数をカウントする
                    End If
                Next
            End If

            For i = 0 To BytCount - 1               ' 変換用ワークから
                bTarget(i) = BytBuff(i)              ' 指定バッファにコピー
            Next i
            iLength = BytCount

        Catch ex As Exception
            MessageBox.Show("HexStrToBin(1):" & ex.Message)
        End Try

    End Sub

#End Region

#Region "　Ｂｉｎ→Ｃｈｒ変換 メソッド　"

    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     BinデータをChr文字列に変換し、文字列を返します。</summary>
    ''' <param name="bTarget">
    '''     取り出す元になるBinデータ。</param>
    ''' <param name="iLength">
    '''     取り出す文字数。</param>
    ''' <returns>
    '''     Chrの文字列全体が返されます。</returns>
    ''' -----------------------------------------------------------------------------------
    Public Shared Function BinToChrStr(ByVal bTarget() As Byte, ByVal iLength As Integer) As String
        Dim i As Integer
        Dim sztmp As String = ""

        For i = 0 To iLength - 1
            Select Case bTarget(i)
                Case 0
                    '無し
                Case 2
                    sztmp = sztmp & "<STX>"
                Case 3
                    sztmp = sztmp & "<ETX>"
                Case 9
                    sztmp = sztmp & "<HT>"
                Case Else
                    sztmp = sztmp & Chr(bTarget(i))
            End Select
        Next i

        Return sztmp
    End Function

#End Region

#Region "　Ｃｈｒ→Ｂｉｎ変換 メソッド　"

    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     Chr文字列をBinデータに変換し、文字列を返します。</summary>
    ''' <param name="szTarget">
    '''     取り出す元になるHex文字列。</param>
    ''' <param name="bTarget">
    '''     Binデータを返されます。</param>
    ''' <param name="iLength">
    '''     取り出したﾊﾞｲﾄ数。</param>
    ''' -----------------------------------------------------------------------------------
    Public Shared Sub ChrStrToBin(ByRef bTarget() As Byte, ByVal szTarget As String, ByRef iLength As Integer)
        Dim BytBuff() As Byte  ' バイナリーデータ作成ワーク
        Dim strBuff As String      ' 変換用ワーク
        Dim iLen As Integer       ' ストリング長
        Dim BytCount As Integer    ' バイト カウント
        Dim i As Integer     ' ループカウンター
        Dim szTmp As String

        Try
            BytCount = 0                    ' バイト カウントクリア
            strBuff = Trim(szTarget)          ' 入力データアイテムをセット
            strBuff = Replace(strBuff, "<STX>", "*")
            strBuff = Replace(strBuff, "<ETX>", "$")
            strBuff = Replace(strBuff, "<HT>", ":")
            iLen = strBuff.Length
            ReDim BytBuff(iLen)
            For i = 0 To iLen - 1
                szTmp = Mid(strBuff, i + 1, 1)
                Select Case szTmp
                    Case "*"
                        BytBuff(i) = 2
                    Case "$"
                        BytBuff(i) = 3
                    Case ":"
                        BytBuff(i) = 9
                    Case Else
                        BytBuff(i) = CByte(Asc(szTmp))
                End Select
            Next i

            HexStrToBin(bTarget, FixCharZero(Hex(iLen), 8), 4)
            For i = 0 To iLen - 1               ' 変換用ワークから
                bTarget(i + 4) = BytBuff(i)              ' 指定バッファにコピー
            Next i
            iLength = iLen + 4

        Catch ex As Exception
            MessageBox.Show("ChrStrToBin(1):" & ex.Message)
        End Try

    End Sub

#End Region

#Region "　Ｈｅｘ→Ｉｎｔ変換 メソッド　"

    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     BinデータをInt型に変換します。</summary>
    ''' <param name="bData">
    '''     取り出す元になるBinデータ。</param>
    ''' <returns>
    '''     Int値が返されます。</returns>
    ''' -----------------------------------------------------------------------------------
    Public Shared Function HexStrToInt(ByVal bData() As Byte, ByVal iSbyte As Integer, ByVal iEbyte As Integer) As Integer
        Dim i As Integer     ' ループカウンター
        Dim BytBuff(3) As Byte  ' バイナリーデータ作成ワーク
        Dim iBytCnt As Integer

        For i = 0 To 3
            BytBuff(i) = 0
        Next i

        Try
            iBytCnt = iEbyte - iSbyte
            If 0 <= iBytCnt And iBytCnt <= 3 Then

                For i = 0 To iBytCnt
                    BytBuff(i + (3 - iBytCnt)) = bData(iSbyte + i)
                Next i

                Array.Reverse(BytBuff)

                If iBytCnt >= 2 Then
                    Return BitConverter.ToInt32(BytBuff, 0)
                ElseIf iBytCnt > 0 Then
                    Return BitConverter.ToInt16(BytBuff, 0)
                Else
                    Return CInt(IIf((127 < BytBuff(0)), BytBuff(0) - &HFF - 1, BytBuff(0)))
                End If
            Else
                Return 0
            End If

        Catch ex As Exception
            MessageBox.Show("HexStrToInt(1):" & ex.Message)
        End Try

        Return 0

    End Function

#End Region

#Region "　Ｈｅｘ→ＵＩｎｔ変換 メソッド　"

    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     BinデータをUIntに変換します。</summary>
    ''' <param name="bData">
    '''     取り出す元になるBinデータ。</param>
    ''' <returns>
    '''     UInt値が返されます。</returns>
    ''' -----------------------------------------------------------------------------------
    Public Shared Function HexStrToUInt(ByVal bData() As Byte, ByVal iSbyte As Integer, ByVal iEbyte As Integer) As UInteger
        Dim i As Integer     ' ループカウンター
        Dim BytBuff(3) As Byte  ' バイナリーデータ作成ワーク
        Dim iBytCnt As Integer

        For i = 0 To 3
            BytBuff(i) = 0
        Next i

        Try
            iBytCnt = iEbyte - iSbyte
            If 0 <= iBytCnt And iBytCnt <= 3 Then

                For i = 0 To iBytCnt
                    BytBuff(i + (3 - iBytCnt)) = bData(iSbyte + i)
                Next i

                Array.Reverse(BytBuff)

                Return BitConverter.ToUInt32(BytBuff, 0)
            Else
                Return 0
            End If

        Catch ex As Exception
            MessageBox.Show("HexStrToUInt(1):" & ex.Message)
        End Try

        Return 0

    End Function

#End Region

#Region "　Ｈｅｘ→Ｓｉｎｇｌｅ変換 メソッド　"

    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     Hex文字列をBinデータに変換し、文字列を返します。</summary>
    ''' <param name="szTarget">
    '''     取り出す元になるHex文字列。</param>
    ''' <returns>
    '''     Single値が返されます。</returns>
    ''' -----------------------------------------------------------------------------------
    Public Shared Function HexStrToSingle(ByVal szTarget As String) As Single
        Dim BytBuff(3) As Byte  ' バイナリーデータ作成ワーク
        Dim strBuff As String      ' 変換用ワーク
        Dim iLen As Integer       ' ストリング長
        Dim BytCount As Integer    ' バイト カウント
        Dim i As Integer     ' ループカウンター

        BytCount = 0                    ' バイト カウントクリア
        strBuff = Trim(szTarget)          ' 入力データアイテムをセット

        Try
            If strBuff <> "" Then           ' メッセージアイテムの入力あり？
                iLen = strBuff.Length        ' メッセージアイテム入力データ長
                For i = 1 To iLen
                    If Mid(strBuff, i, 1) >= "0" Then    ' コントロールキャラをスキップする
                        BytBuff(BytCount) = CByte("&h" & Mid(strBuff, i, 2))
                        i = i + 1                   ' ２文字ずつ処理する為、+1 する
                        BytCount = BytCount + 1     ' バスト数をカウントする
                        If 3 < BytCount Then
                            BytCount = 3            'Singleなので制限する
                        End If
                    End If
                Next
            End If

            Array.Reverse(BytBuff)

            Return BitConverter.ToSingle(BytBuff, 0)

        Catch ex As Exception
            MessageBox.Show("HexStrToSingle(1):" & ex.Message)
        End Try

        Return 0.0

    End Function

#End Region

#Region "　Ｈｅｘ→Ｄｏｕｂｌｅ変換 メソッド　"

    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     Hex文字列をBinデータに変換し、文字列を返します。</summary>
    ''' <param name="szTarget">
    '''     取り出す元になるHex文字列。</param>
    ''' <returns>
    '''     Double値が返されます。</returns>
    ''' -----------------------------------------------------------------------------------
    Public Shared Function HexStrToDouble(ByVal szTarget As String) As Double
        Dim BytBuff(7) As Byte  ' バイナリーデータ作成ワーク
        Dim strBuff As String      ' 変換用ワーク
        Dim iLen As Integer       ' ストリング長
        Dim BytCount As Integer    ' バイト カウント
        Dim i As Integer     ' ループカウンター

        BytCount = 0                    ' バイト カウントクリア
        strBuff = Trim(szTarget)          ' 入力データアイテムをセット

        Try
            If strBuff <> "" Then           ' メッセージアイテムの入力あり？
                iLen = strBuff.Length        ' メッセージアイテム入力データ長
                For i = 1 To iLen
                    If Mid(strBuff, i, 1) >= "0" Then    ' コントロールキャラをスキップする
                        BytBuff(BytCount) = CByte("&h" & Mid(strBuff, i, 2))
                        i = i + 1                   ' ２文字ずつ処理する為、+1 する
                        BytCount = BytCount + 1     ' バスト数をカウントする
                        If 7 < BytCount Then
                            BytCount = 7            'Doubleなので制限する
                        End If
                    End If
                Next
            End If

            Array.Reverse(BytBuff)

            Return BitConverter.ToDouble(BytBuff, 0)

        Catch ex As Exception
            MessageBox.Show("HexStrToDouble(1):" & ex.Message)
        End Try

        Return 0.0

    End Function

#End Region

#Region "　Ｂｉｎ→Ｓｉｎｇｌｅ変換 メソッド　"

    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     Hex文字列をBinデータに変換し、文字列を返します。</summary>
    ''' <param name="bTarget">
    '''     取り出す元になるHex文字列。</param>
    ''' <returns>
    '''     Single値が返されます。</returns>
    ''' -----------------------------------------------------------------------------------
    Public Shared Function BinToSingle(ByVal bTarget() As Byte, ByVal iSbyte As Integer) As Single
        Dim BytBuff(3) As Byte  ' バイナリーデータ作成ワーク
        Dim i As Integer     ' ループカウンター

        Try
            If (iSbyte + 3) < bTarget.Length Then           ' メッセージアイテムの入力あり？
                For i = 0 To 3
                    BytBuff(i) = bTarget(iSbyte + i)
                Next
                Array.Reverse(BytBuff)

                Return BitConverter.ToSingle(BytBuff, 0)

            End If

        Catch ex As Exception
            MessageBox.Show("BinToSingle(1):" & ex.Message)
        End Try

        Return 0.0

    End Function

#End Region

#Region "　Ｂｉｎ→Ｄｏｕｂｌｅ変換 メソッド　"

    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     Hex文字列をBinデータに変換し、文字列を返します。</summary>
    ''' <param name="bTarget">
    '''     取り出す元になるHex文字列。</param>
    ''' <returns>
    '''     Single値が返されます。</returns>
    ''' -----------------------------------------------------------------------------------
    Public Shared Function BinToDouble(ByVal bTarget() As Byte, ByVal iSbyte As Integer) As Double
        Dim BytBuff(7) As Byte  ' バイナリーデータ作成ワーク
        Dim i As Integer     ' ループカウンター

        Try
            If (iSbyte + 7) < bTarget.Length Then           ' メッセージアイテムの入力あり？
                For i = 0 To 7
                    BytBuff(i) = bTarget(iSbyte + i)
                Next
                Array.Reverse(BytBuff)

                Return BitConverter.ToDouble(BytBuff, 0)

            End If

        Catch ex As Exception
            MessageBox.Show("BinToDouble(1):" & ex.Message)
        End Try

        Return 0.0

    End Function

#End Region

#Region "　Ｓｉｎｇｌｅ→Ｈｅｘ変換 メソッド　"

    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     BinデータをHex文字列に変換し、文字列を返します。</summary>
    ''' <param name="fTarget">
    '''     取り出す元になるSingle値。</param>
    ''' <returns>
    '''     Hex文字列が返されます。</returns>
    ''' -----------------------------------------------------------------------------------
    Public Shared Function SingleToHexStr(ByVal fTarget As Single) As String
        Dim BytBuff() As Byte  ' バイナリーデータ作成ワーク
        Dim strBuff As String      ' 変換用ワーク
        Dim i As Integer     ' ループカウンター

        strBuff = ""

        Try
            BytBuff = BitConverter.GetBytes(fTarget)

            For i = BytBuff.GetUpperBound(0) To 0 Step -1

                strBuff = strBuff & Right("00" & Hex(BytBuff(i)), 2)

            Next

            Return strBuff

        Catch ex As Exception
            MessageBox.Show("SingleToHexStr(1):" & ex.Message)
        End Try

        Return ""

    End Function

#End Region

#Region "　Ｄｏｕｂｌｅ→Ｈｅｘ変換 メソッド　"

    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     BinデータをHex文字列に変換し、文字列を返します。</summary>
    ''' <param name="dTarget">
    '''     取り出す元になるDouble値。</param>
    ''' <returns>
    '''     Hex文字列が返されます。</returns>
    ''' -----------------------------------------------------------------------------------
    Public Shared Function DoubleToHexStr(ByVal dTarget As Double) As String
        Dim BytBuff() As Byte  ' バイナリーデータ作成ワーク
        Dim strBuff As String      ' 変換用ワーク
        Dim i As Integer     ' ループカウンター

        strBuff = ""

        Try
            BytBuff = BitConverter.GetBytes(dTarget)

            For i = BytBuff.GetUpperBound(0) To 0 Step -1

                strBuff = strBuff & Right("00" & Hex(BytBuff(i)), 2)

            Next

            Return strBuff

        Catch ex As Exception
            MessageBox.Show("DoubleToHexStr(1):" & ex.Message)
        End Try

        Return ""

    End Function

#End Region

#Region "　文字数　GET　"
    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     文字の文字数を返します。</summary>
    ''' <param name="szMoji">
    '''     文字</param>
    ''' <returns>
    '''     文字数が返されます。</returns>
    ''' -----------------------------------------------------------------------------------
    Public Shared Function CharNum(ByVal szMoji As String) As String
        Dim sjisEnc As Encoding
        Dim intStrLen As Integer
        Dim intStrByte As Integer

        sjisEnc = Encoding.GetEncoding("Shift_JIS")

        intStrByte = sjisEnc.GetByteCount(szMoji)
        intStrLen = szMoji.Length

        CharNum = CStr(intStrLen)       ' 文字数

    End Function

#End Region

#Region "　文字のByte数　GET　　"
    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     文字のByte数を返します。</summary>
    ''' <param name="szMoji">
    '''     文字</param>
    ''' <returns>
    '''     文字のByte数が返されます。</returns>
    ''' -----------------------------------------------------------------------------------
    Public Shared Function CharByte(ByVal szMoji As String) As String
        Dim sjisEnc As Encoding
        Dim intStrLen As Integer
        Dim intStrByte As Integer

        sjisEnc = Encoding.GetEncoding("Shift_JIS")

        intStrByte = sjisEnc.GetByteCount(szMoji)
        intStrLen = szMoji.Length

        CharByte = CStr(intStrByte)     ' 文字のバイト数

    End Function

#End Region

#Region "　大文字に変換　　"
    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     大文字に変換</summary>
    ''' <param name="szMoji">
    '''     文字</param>
    ''' <returns>
    '''     全て大文字で返されます。</returns>
    '''     英文字のみ
    ''' -----------------------------------------------------------------------------------
    Public Shared Function MojiChgLarge(ByVal szMoji As String) As String
        Dim cultInfo As CultureInfo
        Dim txtInfo As TextInfo

        cultInfo = CultureInfo.CurrentCulture
        txtInfo = cultInfo.TextInfo

        '大文字に変換する
        MojiChglarge = txtInfo.ToUpper(szMoji)

    End Function

#End Region

#Region "　小文字に変換　　"
    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     小文字に変換</summary>
    ''' <param name="szMoji">
    '''     文字</param>
    ''' <returns>
    '''     全て小文字で返されます。</returns>
    '''     英文字のみ
    ''' -----------------------------------------------------------------------------------
    Public Shared Function MojiChgSmall(ByVal szMoji As String) As String
        Dim cultInfo As CultureInfo
        Dim txtInfo As TextInfo

        cultInfo = CultureInfo.CurrentCulture
        txtInfo = cultInfo.TextInfo

        '小文字に変換する(テキストインフォの場合)
        MojiChgSmall = txtInfo.ToLower(szMoji)

    End Function

#End Region

#Region "　先頭文字を大文字に変換　　"
    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     先頭文字を大文字に変換</summary>
    ''' <param name="szMoji">
    '''     文字</param>
    ''' <returns>
    '''     先頭文字を大文字で返されます。</returns>
    '''     英文字のみ
    ''' -----------------------------------------------------------------------------------
    Public Shared Function MojiChgHead(ByVal szMoji As String) As String
        Dim cultInfo As CultureInfo
        Dim txtInfo As TextInfo

        cultInfo = CultureInfo.CurrentCulture
        txtInfo = cultInfo.TextInfo

        '一旦小文字に変換
        szMoji = txtInfo.ToLower(szMoji)
        'タイトル文字に変換する(テキストインフォの場合)
        MojiChgHead = txtInfo.ToTitleCase(szMoji)

    End Function

#End Region

#Region "　設定サイズになるように右側にスペースを追加　　"
    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     右側にスペースを追加</summary>
    ''' <param name="szMoji">
    '''     文字</param>
    ''' <param name="iSize">
    '''     サイズ</param>
    ''' <returns>
    '''     設定サイズの大文字で返されます。</returns>
    ''' -----------------------------------------------------------------------------------
    Public Shared Function FixCharSpace(ByVal szMoji As String, ByVal iSize As Integer) As String

        FixCharSpace = Left((szMoji & Space(iSize)), iSize)

    End Function

#End Region

#Region "　設定サイズになるように左側にスペースを追加　　"
    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     左側にスペースを追加</summary>
    ''' <param name="szMoji">
    '''     文字</param>
    ''' <param name="iSize">
    '''     サイズ</param>
    ''' <returns>
    '''     設定サイズの大文字で返されます。</returns>
    ''' -----------------------------------------------------------------------------------
    Public Shared Function FixCharLeftSpace(ByVal szMoji As String, ByVal iSize As Integer) As String

        FixCharLeftSpace = Right((Space(iSize) & szMoji), iSize)

    End Function

#End Region

#Region "　設定サイズになるように左側にゼロを追加　　"
    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     左側にゼロを追加</summary>
    ''' <param name="szMoji">
    '''     文字</param>
    ''' <param name="iSize">
    '''     サイズ</param>
    ''' <returns>
    '''     設定サイズの大文字で返されます。</returns>
    ''' -----------------------------------------------------------------------------------
    Public Shared Function FixCharZero(ByVal szMoji As String, ByVal iSize As Integer) As String
        Dim szTmp As String
        Dim i As Integer

        szTmp = ""
        For i = 1 To iSize
            szTmp = szTmp & "0"
        Next
        FixCharZero = Right((szTmp & szMoji), iSize)

    End Function

#End Region

#Region "　１０進数→２進数（文字列）変換　メソッド　　"
    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     １０進数を２進数（文字列）に変換</summary>
    ''' <param name="iTarget">
    '''     １０進数</param>
    ''' <param name="iLength">
    '''     サイズ</param>
    ''' <returns>
    '''     ２進数（文字列）で返されます。</returns>
    ''' -----------------------------------------------------------------------------------
    Public Shared Function DecimalToBin(ByVal iTarget As Integer, ByRef iLength As Integer) As String

        DecimalToBin = FixCharZero(Convert.ToString(iTarget, 2), iLength)

    End Function

#End Region

#Region "　先頭から文字を検索する　"
    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     検索文字を指定位置から検索しその位置を返します。</summary>
    ''' <param name="szMoji">
    '''     文字</param>
    ''' <param name="szDitect">
    '''     文字</param>
    ''' <param name="iStPos">
    '''     検出開始位置(0から始まる)</param>
    ''' <returns>
    '''     検出位置が返されます。</returns>
    ''' -----------------------------------------------------------------------------------
    Public Shared Function GetPos(ByVal szMoji As String, ByVal szDitect As String, ByVal iStPos As Integer) As Integer
        Dim intGetPos As Integer

        intGetPos = szMoji.IndexOf(szDitect, iStPos)

        GetPos = intGetPos          ' 文字位置

    End Function

#End Region

End Class


